<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// function fn1(){
//     var a = 123;// 局部变量，函数调用时创建，函数执行完成时销毁
// }
// fn1();
// console.log( a );// 报错，全局无法访问局部变量，局部变量函数执行完后被销毁

// var b = 456;// 全局变量，进入页面时创建，关闭页面时销毁
// function fn2(){
//     console.log( b );
// }
// fn2();
// console.log( b );

// 建议减少使用全局变量：1.占用更多内存；2.容易发生命名冲突。


var c = 1;
function fn3(){
    c++;
    console.log( c );
}
fn3();// 2
fn3();// 3
fn3();// 4


function fn4(){
    var d = 1;
    d++;
    console.log( d );
}
fn4();// 2
fn4();// 2
fn4();// 2


// 关于闭包的一些描述：
// 1.函数嵌套函数，内部函数引用外部函数的变量，此时产生闭包
// 2.函数就是闭包
// 3.。。。

// 闭包分为：无效闭包和有效闭包

// 无效闭包：函数嵌套，内部函数引用外部函数的变量或形参
function outer(n){
    var x = 2;// 局部变量
    function inner(){
        x++;
        console.log( x );// 引用外部变量，会形成闭包

        // console.log( n );// 引用外部形参，会形成闭包

        // console.log( 123 );//不会形成闭包
    }
    inner();
}
outer();// 3
outer();// 3
outer();// 3

</script>
</body>
</html>